
//创建链表
function createList(arr) {
    let head = new ListNode(arr[0]);    //创建头结点
    let cur = head;   //指向头结点
    for (let i = 1; i < arr.length; i++) {   //遍历数组
        cur.next = new ListNode(arr[i]);    //创建新结点
        cur = cur.next;  //指向新结点
    }
    return head;    //返回头结点
}
function ListNode(val) {
    this.val = val;
    this.next = null;
}
//反转链表
function reverseList(head) {
    let pre = null; //前一个节点  初始化为null
    let cur = head; //当前节点   初始化为头结点
    while (cur) {   //当前节点不为空
        let next = cur.next;    //下一个节点      初始化为当前节点的下一个节点
        cur.next = pre; //当前节点的下一个节点指向前一个节点     前一个节点指向当前节点
        pre = cur;  //前一个节点指向当前节点     当前节点指向前一个节点
        cur = next; //当前节点指向下一个节点     下一个节点指向前一个节点
    }
    return pre; //返回前一个节点
}
//解决思路  双指针 前一个节点指向当前节点的下一个节点  当前节点指向前一个节点  前一个节点指向当前节点

let arr = [1, 2, 3, 4, 5];
let head = createList(arr);
let res = reverseList(head);
console.log(res);